﻿var fs = require('fs')
  , http = require('http')
  , socketio = require('socket.io');
 
var server = http.createServer(function(req, res) {
    res.writeHead(200, { 'Content-type': 'text/html'});
    res.end(fs.readFileSync(__dirname + '/index.html'));
}).listen(8081, function() {
    console.log('Listening at: http://localhost:8081');
});
 

/*
  * 소켓 통신의 종류
  * 1. public : 자신을 포함한 모든 클라이언트에 데이터를 전달합니다.
  * 2. broadcast : 자신을 제외한 모든 클라이언트에 데이터를 전달합니다.
  * 3. private : 특정 클라이언트에게 데이터를 전달합니다.
  * 
  *  public => serverSocket.sockets.emit('이벤트명', data);
  *  broadcast => socket.broadcast.emit('이벤트명', data);
  *  private => serverSocket.sockets['id'].emit('이벤트명',data);
  */
socketio.listen(server).on('connection', function (socket) {
    //var users = [];

    
    // 메시지 처리
    socket.on('message', function (msg) {
        console.log('@Message Received: ', msg);
        socket.emit('message', msg);
        socket.broadcast.emit('message', msg);
    });
    
    // 이미지 처리
    socket.on('user image', function (msg) {
        //socket.emit('user image', msg);
        socket.broadcast.emit('user image', msg);
    });
    
    // 접속 처리 
    socket.on('user in', function (rawMsg) {
console.log('>>>>>>>>>>>>>>>>>>> user in'+rawMsg);
        var msg = JSON.parse(rawMsg);        
        
        // TODO:: id중복체크
        //var idx = users.indexOf(msg.chat_id);
//console.log("@@@"+idx);        
        //if(idx != -1) {
        //    socket.emit('user in fail', JSON.stringify(msg.chat_id));
        //} else {
            // uars객체에 접속id를 추가
            //users.push(msg.chat_id);

            socket.emit('message', msg.chat_id + '님이 접속하였습니다.');
            socket.broadcast.emit('message', msg.chat_id + '님이 접속하였습니다.');
        //}
        
    });     
     
    // 접속종료 처리 
    socket.on('user out', function (msg) {
console.log('>>>>>>>>>>>>>>>>>>> user out');        
        socket.broadcast.emit('server_event_logs', msg.chat_id + '님이 접속종료하였습니다.');
    });    
});

